
<?php


class UsersController extends AppController{
    
    public $uses = array('User', 'UsersVideo');
    public $layout = 'home';
    
    public function beforeFilter(){
        parent::beforeFilter();
        $this->Auth->allow('inscription', 'pro_file');
    }
    
    /** ***************************************************************************
     *  ***************************************************************************
     *  ***************************************************************************
     *  ***************************************************************************
     * 
     *  LES ACTIONS 
     */
    
    public function index(){
        $user = $this->getCurrentUser();
        $this->set('user', $user);
    }
    
    
    /**
     *
     * @param type $id 
     */
    public function pro_file($id = null){
        if ($id == null || $id == $this->getCurrentUserId()){
            $user = $this->getCurrentUser();
        }
        else{        
            $user = $this->User->getUserById($id);
        }
        
        if (empty($user)){        
            $this->unknownUser();
        }
        
        $sports = $this->User->Sport->find('list', array(
            'conditions' => array(

            ),
            'recursive' => -1,
            'order' => array('Sport.name')
        ));

        $this->set('isMyProfile', ($id == null || $user['User']['id'] == $this->getCurrentUserId()));
        $this->set('user', $user);
        $this->set('sports', $sports);
    }
   
    public function editProfile(){
        $user = $this->getCurrentUser();
        
        $this->request->data = $user;
    }
    
    /************************************************************************
     * Vidéos
     */

    public function uploadVideo(){
        if (!empty($this->request->data['UsersVideo'])){
            
            $data = $this->request->data['UsersVideo'];
            
            $data['users_id'] = $this->getCurrentUserId();
            
            $file = $data['file'];
            $data['filename'] = uniqid().'-'.$file['name'];
            $tmpName = $file['tmp_name'];
            
            $destination = 'uploads/videos/'.$data['filename'];
            debug($destination);
            $resultat = move_uploaded_file($tmpName, $destination);
            
            if ($resultat){
                unset($data['file']);

                if ($data['sports_id'] == null){
                    $data['sports_id'] = $this->getCurrentSportId();
                }

                if ($data = $this->User->UsersVideo->save($data)){
                    $this->Session->setFlash("Your video has been uploaded");
                    $id = $data['UsersVideo']['id'];
                    $this->redirect('/UsersVideos/edit_video/'.$id);
                }
                else{
                    $this->Session->setFlash("Due to an error, Your video has not been uploaded");                
                }
            }
            else{
                $this->Session->setFlash("La vidéo n'a pu être uploader");
            }
        }
        
        
        $this->set('sports', $this->User->Sport->find('list'));
    }
    
    
    public function myVideos(){
        /*
        $this->User->UsersVideo->unbindModel(array(
            'hasMany' => array(
                'UsersVideosComment'
            )
        ));
        
        $videos = $this->User->UsersVideo->getVideos('all', array(
            'conditions' => array(
                'UsersVideo.users_id' => $this->getCurrentUserId()
            ),
            'fields' => array(
                'UsersVideo.*', 'VideosAdvice.users_videos_id'
            ),
        ));
        */
        
        
        // Récupération des vidéo par type :        
        $options = array(
            'conditions' => array(
                'UsersVideo.users_id' => $this->getCurrentUserId()
            ),
            'fields' => array(
            ),
        );
        $types = array(
            'VideosEditing', 'VideosTrick', 'VideosTutorial'
        );
        
        foreach ($types as $type){
            $this->User->UsersVideo->bindModel(array(
                'hasOne' => array(
                    $type
                )
            ));
            $this->User->UsersVideo->$type->bindModel(array(
                'hasOne' => array(
                    'VideosAdvice' => array(
                        'foreignKey' => 'users_videos_id'
                    )
                )
            ));
            $var = lcfirst($type);
            $$var = $this->User->UsersVideo->$type->find('all', $options);
            $this->set($var, $$var);     
        }
        
        // Récupération des videos non typé : 
        
        $videosNotype = $this->User->UsersVideo->find('all', array(
            'conditions' => array(
                'UsersVideo.users_id' => $this->getCurrentUserId(),
                'UsersVideo.type' => 'null'
            ),
            'fields' => array(
                'UsersVideo.*', 'VideosAdvice.users_videos_id'
            ),            
        ));
        
        $this->set('videosNotype', $videosNotype);
    }
    
  
    
    
    public function askAdvices($id){              
        if (!empty($this->request->data['VideosAdvice'])){            
            $data = $this->request->data;             
            $data['VideosAdvice']['users_videos_id'] = $id;
            debug($data);
            $this->User->UsersVideo->VideosAdvice->save($data);
            if ($this->User->save($data)){
                $this->redirect(array('action' => 'myVideos'));
            }
            else{
                $this->Session->setFlash('Erreur');
            }
        }       
        
        $video = $this->User->UsersVideo->getVideos('first', array(
            'conditions' => array(
                'UsersVideo.users_id' => $this->getCurrentUserId(),
                'UsersVideo.id' => $id
            )
        ));
        
        $this->set('video', $video);
        
        
    }
    
    
    public function delVideos($id){
         
        $video = $this->UsersVideo->find('first', array(
            'conditions' => array(
                'UsersVideo.id' => $id, 
                'UsersVideo.users_id' => $this->getCurrentUserId()
            ),
            'recursive' => -1
        ));
        
        if (!empty($video)){
            // Suppréssion des liens :
            $type = $video['UsersVideo']['type'];
            if ($type != 'null'){
                $this->UsersVideo->bindModelType($type);
                $this->UsersVideo->$type->delete($id, true);
            }
            
            $this->UsersVideo->VideosAdvice->delete($id, true);
            $this->UsersVideo->delete($id, false);            
            
            $filename = $video['UsersVideo']['filename'];
            
            if (!unlink('uploads/videos/'.$filename)){
                $this->Session->setFlash('Suppression impossible du fichier'.$filename);                
            }

            // TODO suppréssion du fichier

            $this->Session->setFlash('The video has been removed');
        }
        else{
            $this->Session->setFlash('La vidéo que vous essayer de supprimer n\'existe pas');            
        }
        // Redirection
        $this->redirect(array('action' => 'myVideos'));
    }
    
    
    /************************************************************************
     * Gestion des comptes utilisateurs
     */

    public function inscription() { 
        $this->layout = 'default';  
        if (!empty($this->request->data)){
            
            $data = $this->request->data; 
            
            $today = date('Y-m-d h:m:s');
            $data['User']['last_connexion'] = $today;
            $data['User']['date_creation'] = $today;
            $data['User']['password'] = $this->Auth->password($data['User']['password']);
            
            $this->User->set($data);
            
             if ($this->User->validates()){
                 $this->User->save($data);   
                 $this->Session->setFlash('Votre compte à été créé. Vous allez recevoir un email de confirmation');
                 $this->redirect(array('action' => 'index'));
             }
        }       
        
    }
   
    public function login() {
        $this->layout = 'default';
        if ($this->request->is('post')) {            
            if ($this->Auth->login()) {
                return $this->redirect($this->Auth->redirect());
            } else {
                $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'Auth');
            }
            
        }
    }
    
    public function logout() {
        $this->redirect($this->Auth->logout());
    }
    
    
    public function settings(){
        
        $user =  $this->getCurrentUser();
        
        $this->set('user', $user);
        
    }
    
    
    /** ***************************************************************************
     *  ***************************************************************************
     *  ***************************************************************************
     *  ***************************************************************************
     * 
     *  LES FONCTIONS 
     */
    
    /**
     *  Ajoute le sport $id au sports pratiqué par l'utilisateur
     *  TODO : Vérifie que le sport n'éxiste pas déja
     *  Renvoi sur la page de profile
     */
    public function addSport(){
        $data = $this->request->data;
        $data['User']['id'] = $this->getCurrentUserId();
        debug($data);

        $r =  $this->User->save($data);
        
        if ($r){
            $this->Session->setFlash("Your sports have been saved");
        }
        else{
            $this->Session->setFlash("Your sports could not been saved, try again later");            
        }
        
        $this->redirect(array('action' => 'pro_file'));
    }
}


/**
 * AIDE : 
 
 
        // Récupérer l'utilisateur connecté
        $this->getCurrentUser();
        // Récupérer son id
        $this->getCurrentUserId();
        
        // contien t
        // variable les données envoyée par un formulaire
        $this->request->data;
        
        
        // sauvegarder les données (on passe un tableau de donnée)
        $this->NomDuModel->save(array(
            'NomModel' => array(
                'champ1' => 'valeur',
                'champ2' => 'valeur ..'
            )
        ));
        // si le champ id et défini, l'enregistrement sera mis a jour, sinon il sera inséré
        
        // Récupéré des données :
        $this->NomDuModel->find('all', array(
            // Les conditions des requète en DB
            'conditions' => array(
                // EN SQL : NomModel.nom_champ = 'valeur'
                'NomModel.nom_champ' => 'valeur',                
                // EN SQL : NomModel.nom_champ LIKE '%valeur'
                'NomModel.nom_champ LIKE ' => '%valeur',
                // EN SQL : NomModel.nom_champ != '%valeur'
                'NomModel.nom_champ != ' => 'valeur',
                // ... 
            ),
            // Si on veut séléctionner que certain champ
            'fields' => array(
                'NomModel.nom_champ'
            ), 
            // Si on veut récupérer que 12 enregistrement
            'limit' => 12,
            // Si on veut récupérer a partir du 3eme enregistrement
            'offset' => 3, 
            
            // Si 2 : Récupère les enregistrements et toute les tables associées et les $belongsTo des tables associé au table associé...
            // Si 1 : Récupère les enregistrements et toute les tables associées
            // Si 0 : Récupère les enregistrement de NomModel et seulement les tables associées $belongsTo
            // Si -1 : Récupère les enregistrement de NomModel sans aucune table associé
            'recursive' => 1 // Par défaut : 1 
            
        ));
        
        
        // Envoyer des donnée à la vue
        $this->set('nomDeLaVariableDansLaVue', $contenu);
        
        
        // afficher n'importequel variable 
        debug($variable);
 * 
 * 
 */

?>
